#ifndef _IR_H_
#define _IR_H_

/**
 * @brief 按键编码宏定义
 * 
 * 这些宏定义代表红外遥控器不同按键的编码值，用于程序中识别按键输入。
 */
#define POWER 0x45      ///< 电源键
#define MODE 0x46       ///< 模式键
#define MUTE 0x47       ///< 静音键
#define PAUSE 0x44      ///< 暂停键
#define LAST 0x40       ///< 上一曲键
#define NEXT 0x43       ///< 下一曲键
#define EQ 0x07         ///< 均衡器键
#define VOL_UP 0x15     ///< 音量增加键
#define VOL_DOWN 0x09   ///< 音量减少键
#define KEY_0 0x16      ///< 按键 0
#define RPT 0x19        ///< 重复键
#define U_SD 0x0D       ///< USB/SD 切换键
#define KEY_1 0x0C      ///< 按键 1
#define KEY_2 0x18      ///< 按键 2
#define KEY_3 0x5E      ///< 按键 3
#define KEY_4 0x08      ///< 按键 4
#define KEY_5 0x1C      ///< 按键 5
#define KEY_6 0x5A      ///< 按键 6
#define KEY_7 0x42      ///< 按键 7
#define KEY_8 0x52      ///< 按键 8
#define KEY_9 0x4A      ///< 按键 9

/**
 * @brief 系统状态枚举类型
 * 
 * 描述红外解码的四种状态：
 * - FREE: 空闲状态，无红外信号。
 * - STARE: 等待起始信号状态。
 * - DATA: 数据解码状态，正在接收和处理数据。
 * - FINISH: 解码完成状态，数据已经解码完成。
 */
enum State
{
    FREE = 0,   ///< 空闲状态
    STARE = 1,  ///< 等待起始信号
    DATA = 2,   ///< 数据解码状态
    FINISH = 3  ///< 解码完成状态
};

/**
 * @brief 获取命令完成标志
 * 
 * @return unsigned char 返回 1 表示命令已完成，0 表示未完成。
 */
unsigned char Command_Flag();

/**
 * @brief 获取重复标志位
 * 
 * @return unsigned char 返回 1 表示重复信号，0 表示非重复信号。
 */
unsigned char Repeat_Flag();

/**
 * @brief 获取解码后的地址
 * 
 * @return unsigned char 返回解码后的地址；如果解码未完成，返回 0。
 */
unsigned char Re_Address();

/**
 * @brief 获取解码后的命令
 * 
 * @return unsigned char 返回解码后的命令；如果解码未完成，返回 0。
 */
unsigned char Re_Command();

/**
 * @brief 控制 Timer0 的启停
 * 
 * @param command 控制命令：
 *        - 1: 启动定时器。
 *        - 0: 停止定时器。
 */
void Timer0_Timing(unsigned char command);

/**
 * @brief 初始化定时器的计时值
 * 
 * @param command 定时器初始值（16 位整数）。
 */
void TimeInit(unsigned char command);

/**
 * @brief 获取当前定时器计时值
 * 
 * @return unsigned int 返回当前定时器的计时值（16 位整数）。
 */
unsigned int Timer0_Gettime();

#endif // _IR_H_
